在安裝 Rspec 之前我們先產生一個 Rails 6的新專案到 Gemfile 可以看到其實在 test 裡已經有這些 gem 了
group :test do
# Adds support for Capybara system testing and selenium driver
gem 'capybara', '>= 3.26'
gem 'selenium-webdriver'
# Easy installation and use of web drivers to run system tests with browsers
gem 'webdrivers'
end
其實 capybara 以及 selenium 已經有了 其實就能夠進行 整合測試了但先不及我們先來安裝 Rspec 吧!
gem 'rspec-rails', '~> 5.0', '>= 5.0.2'
並且 bundle install
再來產生出相關 rspec 檔案
rails generate rspec:install
load ~/.spring.rb
Running via Spring preloader in process 76963
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
我們跟著 github 上的官方文件走過一遍吧!
# RSpec hooks into built-in generators
$ rails generate model user
invoke active_record
create db/migrate/20181017040312_create_users.rb
create app/models/user.rb
invoke rspec
create spec/models/user_spec.rb
# RSpec also provides its own spec file generators
$ rails generate rspec:model user
create spec/models/user_spec.rb
# List all RSpec generators
$ rails generate --help | grep rspec
基本上就是產生一個 User Model 和 User 的測試檔
看官方文件有以下幾種運作方式
# 預設: 跑所有spec資料夾底下的 *_spec.rb
$ bundle exec rspec
# 指定只跑 spec 底下的 models 資料夾
$ bundle exec rspec spec/models
# 指定只跑 spec/controllers底下的accounts_controller_spec.rb
$ bundle exec rspec spec/controllers/accounts_controller_spec.rb
# 指定只跑 spec/controllers底下的accounts_controller_spec.rb第八行的測試案例
$ bundle exec rspec spec/controllers/accounts_controller_spec.rb:8
# 查看指令
$ bundle exec rspec --help
那有時候會發現有些測試不是每次都正確這時候我會使用 repeat
來重複跑測試
跑10次 accounts_controller_spec.rb 這個測試
$ repeat 10 bundle exec rspec spec/controllers/accounts_controller_spec.rb
又或是想跑兩個檔案?
$ bundle exec rspec spec/controllers/accounts_controller_spec.rb spec/controllers/profiles_controller_spec.rb
明天我們就來寫出我們的第一個測試檔摟!
參考來源: